#include "StdAfx.h"
#include "NodoXML.h"

NodoXML::NodoXML(){
}

void NodoXML::addChild(NodoXML nodo) {
	this->children.push_back(nodo);	
}

void NodoXML::addAttribute(string clave, string valor) {
	
	atributo atrib(clave,valor);
	
	this->attributes.push_back(atrib);
}

string NodoXML::getAttribute(string attribute) {

	vector<atributo>::iterator it;
	string atributo = "";

	for (it = attributes.begin() ; it < attributes.end() ; it++) {
		
		if (Utilidades::sonStringsIguales(it->first, attribute)) {
	//	if (it->first == attribute) {
			atributo = it->second;
		}
	}

	return atributo;
}

int NodoXML::getAttributeNum(string attribute) {
	string at = getAttribute(attribute);

	return atoi(at.c_str());
}

vector<NodoXML> NodoXML::getChildrenList(string name) {  //insensitivo al CASE
	
	if (name.length() == 0) {
		return children;
	}

	vector<NodoXML> resultado;

	vector<NodoXML>::iterator it;

	for (it = children.begin(); it != children.end() ; it++) {
		
		if ( Utilidades::sonStringsIguales(it->nombre,name) ) {

			resultado.push_back(*it);
		}
	}

	//if (resultado.size() == 0){
	//	Log4Cpp::info("la busqueda de: " + name + " no ha arrojado resultados","NodoXML");
	//}

	return resultado;
}

string NodoXML::getRoot(){
 
      return nombre;

}

string NodoXML::serialize() {
	string tag = "<"+nombre+" ";

	if (this->attributes.size()>0) {
		for (int i = 0 ; i<attributes.size() ; i++) {
			atributo at = attributes[i];

			tag += at.first + "=\"" + at.second + "\" ";
		}
	}

	if (this->children.size() > 0) {
		tag += ">\n\t";
		for (int i = 0 ; i<children.size() ; i++) {
			NodoXML hijo = children[i];
			tag += hijo.serialize();
		}
		tag += "</"+nombre+">\n";

	} else {
		tag += "/>\n";
	}

	return tag;
}
